package top.lishuoboy.logback.a2architecture;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;

/**
 * @author ：lishuoboy
 * @date ：Created in 2021-1-2 0:18
 * @description：
 * @modified By：
 * @version: $
 */
public class LoggerParamsOutput {
    private static Logger logger = LoggerFactory.getLogger(LoggerParamsOutput.class);
    
    public static void main(String[] args) {
        // 有一种更好的方式去格式化日志信息。假设 entry 是一个 Object 对象：
        // 只有在需要打印 debug 信息的时候，才会去格式化日志信息，将 '{}' 替换成 entry 的字符串形式。也就是说在这种情况下，如果禁止了日志的打印，也不会有构建参数上的性能消耗。
        Object entry = new String("小明");
        logger.debug("The entry is {}", entry);
        
        // 下面两行输出的结果是一样的，但是一旦禁止日志打印，第二个变量的性能至少比第一个变量好上 30 倍。
        logger.debug("The new entry is " + entry + ".");
        logger.debug("The new entry is {}", entry);
        
        // 使用两个参数的例子如下：
        Object oldEntry = new String("小红");
        logger.debug("The new entry is {}, It replaces {}.", entry, oldEntry);
        
        // 如果需要使用三个或三个以上的参数，可以采用如下的形式：
        Object[] paramArray1 = {"newVal", "below", "above"};
        logger.debug("Value {} was inserted between {} and {}.", paramArray1);
        
        // 如果需要使用三个或三个以上的参数，可以采用如下的形式：
        Object[] paramArray2 = {"newVal", "below", "above","bbbbbbbbbb"};
        logger.debug("Value {} was inserted between {} and {}.", paramArray2);
        
        // 如果需要使用三个或三个以上的参数，可以采用如下的形式：
        Object[] paramArray3 = {"newVal", "below"};
        logger.debug("Value {} was inserted between {} and {}.", paramArray3);
        
        
        // 如果需要使用三个或三个以上的参数，可以采用如下的形式：
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        logger.debug("Value {} was inserted between {} and {}.", list);
        
    }
    
}
